package com.caocaog.market.service;

import com.caocaog.market.entity.GoodsSpec;
import com.caocaog.market.vo.GoodsAttributeVo;
import org.jeecg.common.system.base.service.GenericService;
import org.springframework.validation.annotation.Validated;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;

/**
 * 商品规格信息
 *
 * @author chechen
 * @date 2022-04-11
 */
@Validated
public interface GoodsSpecService extends GenericService<GoodsSpec> {

    /**
     * TODO 重写VO
     * 商品属性表通过id查询
     */
    List<GoodsAttributeVo> getGoodsSpecDataByGoodsId(@NotNull String goodsId);

    /**
     * 根据id获取商品规格
     *
     * @param id 商品规格id
     * @return 商品规格信息
     */
    GoodsSpec getGoodsSpec(@NotNull String id);

    /**
     * 根据商品id获取商品规格集合（缓存）
     *
     * @param goodsId 商品id
     * @return 商品规格集合
     */
    List<GoodsSpec> getGoodsSpecByGoodsId(@NotNull String goodsId);

    /**
     * 新增商品规格（缓存）
     *
     * @param goodsSpec 商品规格信息
     * @return 新增后的实体
     */
    GoodsSpec insertGoodsSpec(@NotNull @Valid GoodsSpec goodsSpec);

    /**
     * 更新商品规格（缓存）
     *
     * @param goodsSpec 商品规格信息
     * @return 更新后的实体
     */
    GoodsSpec updateGoodsSpec(@NotNull @Valid GoodsSpec goodsSpec);

    /**
     * 批量新增商品规格（缓存）
     *
     * @param goodsSpecs 商品规格集合
     * @return 受影响行数
     */
    int insertBatchGoodsSpec(@NotNull @Size(min = 1) @Valid List<GoodsSpec> goodsSpecs);

    /**
     * 批量更新商品规格（缓存）
     *
     * @param goodsSpecs 商品规格集合
     * @return 受影响行数
     */
    int updateBatchGoodsSpec(@NotNull @Size(min = 1) @Valid List<GoodsSpec> goodsSpecs);

    /**
     * 根据商品id删除商品规格（缓存）
     *
     * @param goodsId 商品id
     * @return 受影响行数
     */
    int deleteGoodsSpecByGoodsId(@NotNull String goodsId);

    /**
     * 根据商品ids获取商品规格ids
     *
     * @param goodsIds 商品ids
     * @return 商品规格ids
     * @see #selectListByFieldCache
     */
    String[] getGoodsSpecIdsByGoodsIds(@NotNull @Size(min = 1) String... goodsIds);

}
